Java 7 এ Diamond Operator (<>)

Java Technologies - জাভা জেনেরিক্স (Java Generics) Type Inference এবং Diamond Operator |
145
145

Diamond Operator জাভা 7-এ প্রবর্তিত একটি বৈশিষ্ট্য যা জেনেরিক্স ব্যবহার করার সময় কোডের সরলতা এবং পড়ার সহজতা বাড়ায়। এটি কম্পাইলারকে টাইপ অনুমান করার সুযোগ দেয়, ফলে জেনেরিক টাইপগুলি বারবার উল্লেখ করার প্রয়োজন হয় না।


Diamond Operator (<>) এর উদ্দেশ্য

  1. টাইপ ইনফারেন্স:
    • টাইপ প্যারামিটার কম্পাইলার দ্বারা স্বয়ংক্রিয়ভাবে নির্ধারিত হয়।
    • ডুপ্লিকেট টাইপ ঘোষণার প্রয়োজন নেই।
  2. কোড সঠিকতা:
    • কম কোড লেখার মাধ্যমে একই ফলাফল পাওয়া যায়।
    • টাইপ ভুল করার ঝুঁকি কমে।
  3. কোড ক্লিনলিনেস:
    • জেনেরিক টাইপের সাথে কাজ করা আরও সহজ হয়।

Diamond Operator এর পূর্বে এবং পরে উদাহরণ

Java 7 এর পূর্বে:

import java.util.ArrayList;
import java.util.List;

public class BeforeJava7 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(); // Repeating the type
        list.add("Java");
        list.add("Generics");

        for (String str : list) {
            System.out.println(str);
        }
    }
}

Java 7 এবং পরে (Diamond Operator):

import java.util.ArrayList;
import java.util.List;

public class AfterJava7 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(); // Diamond operator used
        list.add("Java");
        list.add("Generics");

        for (String str : list) {
            System.out.println(str);
        }
    }
}

কিভাবে Diamond Operator কাজ করে?

  • যখন আপনি <> ব্যবহার করেন, জাভা কম্পাইলার টাইপ ইনফারেন্স (Type Inference) ব্যবহার করে টাইপ নির্ধারণ করে।
  • এটি উপযুক্ত টাইপ নির্ধারণ করতে ডেটা টাইপ, কনটেক্সট, এবং কনস্ট্রাক্টর প্যারামিটার পরীক্ষা করে।

উদাহরণ:

Map<String, List<Integer>> map = new HashMap<>();

এখানে, <> টাইপ প্যারামিটার (String, List<Integer>) পূর্ববর্তী ঘোষণার উপর ভিত্তি করে অনুমান করে।


Diamond Operator এর সুবিধা

  1. কম কোড লেখার প্রয়োজন:
    • টাইপ ডুপ্লিকেশন কমে।
  2. সহজতা:
    • কোড পড়তে সহজ হয়।
  3. টাইপ সেফটি:
    • টাইপ কনফ্লিক্ট এড়ানো যায়।

উদাহরণ:

List<List<String>> nestedList = new ArrayList<>(); // Clean and type-safe

Diamond Operator এর সীমাবদ্ধতা

1. Anonymous Class এর সাথে কাজ করে না:

List<String> list = new ArrayList<>() {
    @Override
    public boolean add(String s) {
        return super.add(s);
    }
}; // Compile-time error

কারণ: Anonymous class এর ক্ষেত্রে টাইপ স্পেসিফিকেশন প্রয়োজন।

সঠিক সমাধান:

List<String> list = new ArrayList<String>() {
    @Override
    public boolean add(String s) {
        return super.add(s);
    }
};

2. Raw Types এবং Legacy Code এ সীমাবদ্ধতা:

  • Raw টাইপের সাথে Diamond Operator কাজ করে না।
List list = new ArrayList<>(); // Warning: Raw type usage

Diamond Operator এবং জেনেরিক কনস্ট্রাক্টরের ব্যবহার

উদাহরণ:

class Box<T> {
    private T value;

    public Box(T value) {
        this.value = value;
    }

    public T getValue() {
        return value;
    }
}

public class Main {
    public static void main(String[] args) {
        Box<Integer> box = new Box<>(100); // Type inference used
        System.out.println(box.getValue());
    }
}

Diamond Operator জাভা 7 এ টাইপ ইনফারেন্স সহজ করার জন্য একটি শক্তিশালী বৈশিষ্ট্য। এটি:

  1. কোড সংক্ষিপ্ত করে।
  2. টাইপ ডুপ্লিকেশন এড়ায়।
  3. জেনেরিক্সের ব্যবহারে কোডের ক্লিনলিনেস বাড়ায়।

তবে, Anonymous Class এবং Raw Types এর ক্ষেত্রে এর সীমাবদ্ধতা মনে রাখা গুরুত্বপূর্ণ।

Content added By
Promotion